package com.briup.smartlabs.service.impl;

import com.briup.smartlabs.bean.ex.DeviceType;
import com.briup.smartlabs.mapper.ex.DeviceTypeMapper;
import com.briup.smartlabs.service.DeviceTypeService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.UUID;

/**
 * @author shaoyb
 * @program: Mybatis
 * @description TODO
 * @create 2023/5/30 18:02
 **/
@Service
public class DeviceTypeServiceImpl implements DeviceTypeService {

    @Autowired
    private DeviceTypeMapper deviceTypeMapper;

    @Override
    public void saveOrUpdate(DeviceType type) {
        // 业务上的判断
        // 1、如何判断更新还是保存呢？ 看传递过来的数据的id是否存在
        String deviceTypeId = type.getId();
        if(deviceTypeId == null || "".equals(deviceTypeId)){
            // 新增的操作
            // 2、新增的类型是否已经存在于数据库了？先进行一下查询
            // 根据名字查询
            List<DeviceType> list = deviceTypeMapper.selectByName(type.getName());
            // 判断list里有没有东西
            if(list != null && list.size()>0){
                throw new RuntimeException("类型已经存在，不能继续新增");
            }else{
                // 先手动加入的时候给一个id
                // 后面会新增自动生成主键的逻辑（UUID，可以自动生成一个唯一的且随机的字符串）
                type.setId(UUID.randomUUID().toString());
                deviceTypeMapper.insert(type);
            }

        }else {
            // 更新的操作
            // 复杂一点的话，可以判断更新的id是否存在，如果不存在可以抛出异常
            deviceTypeMapper.updateById(type);
        }

    }

    @Override
    public void removeById(String id) {
        // 分析一下 删除的逻辑
        // 先查询一下id是否存在
        DeviceType deviceType = deviceTypeMapper.selectById(id);
        if(deviceType != null){
            // 如果存在，删除
            // 设备类型下面有很多设备，先根据设备类型删除所有设备，再删除设备类型
            deviceTypeMapper.deleteById(id);
        }else{
            // 如果不存在，抛出异常
            throw new RuntimeException("要删除设备类型的id不存在");
        }
    }

    @Override
    public Map<String, List<String>> removeByBatch(String[] id) {
        return null;
    }

    @Override
    public PageInfo<DeviceType> findByCondition(int pageSize, int pageNum, String key) {
        // 用了分页插件（PageHelper）的第一步，要设置页数和条数（固定写法）
        PageHelper.startPage(pageNum,pageSize);
        // 正常进行查询即可（调用dao层查询的方法）
        List<DeviceType> list = deviceTypeMapper.selectByCondition(key);
        // 返回一个新建的PageInfo对象，注意泛型和构造器里的参数
        return new PageInfo<DeviceType>(list);
    }
}
